﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SolverLibrary.Data_Entities
{
    public interface Puzzle
    {
        /// <summary>
        /// Get the board for the puzzle. The type of the puzzle indicates what
        /// each item on the board contains. This maintains that there is a bounded
        /// set of items that the board must have within it.
        /// </summary>
        /// <returns>
        /// The board instance for this puzzle.
        /// </returns>
        Board getBoard();

        /// <summary>
        /// Solve the given puzzle. We get back a board which has been fully populated.
        /// This suggests that a puzzle must be solvable. For example, a chess board is
        /// not solvable. A sudoku puzzle is solvable. This also does not complete any
        /// kid of validation to check if the puzzle is solve-able.
        /// </summary>
        /// <returns>
        /// The solved board instance for this puzzle.
        /// </returns>
        Board solve();
    }
}
